import re

from django import http
from django.http import HttpResponse
from django.shortcuts import render, redirect

# Create your views here.

# 项目中用到的全部都是类视图
from django.urls import reverse
from django.views import View

from apps.users.models import User

"""
一、我们要把需求写下来（前端要收集什么数据，后端要干什么）
    前端：用户名，密码，确认密码，手机号
    后端：实现注册

二、把后端的思路写下来（把一些能够想到的内容写下来）

    1.接收数据
    2.验证数据
        2.1 判断必须入库的数据是否都提交过来
        2.2 判断用户名是否符合逻辑，判断是否重复
        2.3 判断密码是否符合逻辑
        2.4 判断密码和确认密码是否一致
        2.5 判断手机号是否符合要求，判断手机号是否重复
    3.数据入库
    4.返回响应

三、 确定请求方式和路由

    POST   register/

"""

"""
一、我们要把需求写下来（前端要收集什么数据，后端要干什么）
    前端：要收集用户名信息
    后端：判断是否重复

二、把后端的思路写下来（把一些能够想到的内容写下来）

    1.获取用户名
    2.我们根据查询的用户名的数量来判断是否重复 0表示不重复  1表示重复
    3.返回响应（Json数据）

三、 确定请求方式和路由（请求的路径）

    GET   usernames/(?P<username>[a-zA-Z0-9_-]{5,20})/count/   关键字

    GET   usernamecount/?username=xxx     request.GET

    POST  usernamecount/          body    request.POST

"""


"""
断点和debug配合使用

断点的优势：
    1、可以看到程序在运行过程中的数据
    2、一步一步执行可以看到程序的逻辑是否符合预期

哪里加断点：
    1、在函数的入口处加
    2、要验证哪里的代码就在哪里加
"""

class UsernameCountview(View):

    def get(self,request,username):

        count = User.objects.filter(username=username).count()

        return http.JsonResponse({'count':count})


class MobileCountview(View):

    def get(self,request,mobile):

        count = User.objects.filter(mobile=mobile).count()

        return http.JsonResponse({'count':count})



class RegisterView(View):

    def get(self,request):

        # return HttpResponse('注册页面')
        return render(request,'register.html')

    def post(self,request):
        # 1.接收数据
        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        mobile = request.POST.get('mobile')

        # 2.验证数据
        #     2.1判断必须入库的数据是否都提交过来
            # all 方法：只要列表中有一个值为NONE 该值就为False
        if not all([username,password,password2,mobile]):
            return http.HttpResponseBadRequest('参数错误')

        #     2.2判断用户名是否符合逻辑
        if not re.match(r'[a-zA-Z0-9_-]{5,20}',username):
            return http.HttpResponseBadRequest('用户名不符合规则')

        #     2.3判断密码是否符合逻辑
        if not re.match(r'[a-zA-Z0-9]{8,20}',password):
            return http.HttpResponseBadRequest('密码不符合规则')

        #     2.4判断密码和确认密码是否一致
        if password != password2:
            return http.HttpResponseBadRequest('密码不一致')

        #     2.5判断手机号是否符合要求，判断手机号是否重复
        if not re.match(r'1[3-9]\d{9}',mobile):
            return http.HttpResponseBadRequest('手机号不符合规则')

        # 3.数据入库

        # User.objects.create()     这样入库密码是明文

        # create_user 可以对密码进行加密处理
        user = User.objects.create_user(username=username,
                                 password=password,
                                 mobile=mobile)

        # 设置session信息
        # request.session['use_id'] = user.id,

        # 借助于系统的session设置
        # 记录注册信息，实现自动登录（也就是要实现会话保持）
        from django.contrib.auth import login

        login(request,user)




        # 4.返回响应,想跳转到首页去
        # reverse 是通过 name 来获取视图的路由
        # path = reverse('namespace:name')
        path = reverse('contents:index')
        response = redirect(path)
        return response
        return HttpResponse('注册成功')

















































